#!/bin/bash

readonly TIMEOUT=30
readonly H=15
readonly W=40
readonly N_ITEMS=10
readonly DEFAULT_LANG='en_US.UTF-8'
readonly LANG_TITLE="System language selection"
readonly LANG_PROMPT="Choose your language:"
readonly DEFAULT_KEYMAP='us'
readonly KEYMAP_TITLE="System keymap selection"
readonly KEYMAP_PROMPT="Choose your keymap:"
readonly -a LANGUAGES=( 'en_US.UTF-8' "English"              \
                        'eo'          "Esperanto"            \
                        'es_ES.UTF-8' "Spanish"              \
                        'fr_FR.UTF-8' "French"               \
                        'gl_ES.UTF-8' "Galego"               \
                        'it_IT.UTF-8' "Italian"              \
                        'pl_PL.UTF-8' "Polish"               \
                        'pt_BR.UTF-8' "Brazilian-Portuguese" )
readonly -a ESPERANTO_LANG_PACKS=(  'iceweasel-l10n-es-eo'                      )
readonly -a SPANISH_LANG_PACKS=(    'iceweasel-l10n-es-ar' 'icedove-l10n-es-ar'
                                    'iceweasel-l10n-es-cl'
                                    'iceweasel-l10n-es-es' 'icedove-l10n-es-es'
                                    'iceweasel-l10n-es-mx'                      )
readonly -a FRENCH_LANG_PACKS=(     'iceweasel-l10n-fr'    'icedove-l10n-fr'    )
readonly -a GALEGO_LANG_PACKS=(     'iceweasel-l10n-gl'    'icedove-l10n-gl'    )
readonly -a ITALIAN_LANG_PACKS=(    'iceweasel-l10n-it'    'icedove-l10n-it'    )
readonly -a POLISH_LANG_PACKS=(     'iceweasel-l10n-pl'    'icedove-l10n-pl'    )
readonly -a PORTUGUESE_LANG_PACKS=( 'iceweasel-l10n-pt-br' 'icedove-l10n-pt-br' )
readonly -a KEYMAPS=( 'af'          "Afrikaans-Lang"   \
                      'al'          "Albanian"         \
                      'am'          "Amharic"          \
                      'ara'         "Arabic"           \
                      'at'          "at"               \
                      'au'          "au"               \
                      'az'          "Azerbaijani"      \
                      'ba'          "Bashkir"          \
                      'be'          "Belarusian"       \
                      'bg'          "Bulgarian"        \
                      'bn'          "Bihari-Languages" \
                      'br'          "Breton"           \
                      'brai'        "brai"             \
                      'bt'          "bt"               \
                      'bw'          "bw"               \
                      'by'          "by"               \
                      'ca'          "Catalan"          \
                      'cd'          "cd"               \
                      'ch'          "Chamorro"         \
                      'cm'          "cm"               \
                      'cn'          "cn"               \
                      'cz'          "Czech"            \
                      'de'          "German"           \
                      'dk'          "dk"               \
                      'dz'          "Dzongkha"         \
                      'ee'          "Ewe"              \
                      'epo'         "Esperanto"        \
                      'es'          "Spanish"          \
                      'et'          "Estonian"         \
                      'fi'          "Finnish"          \
                      'fo'          "Faroese"          \
                      'fr'          "French"           \
                      'gb'          "gb"               \
                      'ge'          "ge"               \
                      'gh'          "gh"               \
                      'gn'          "Guaraní"          \
                      'gr'          "gr"               \
                      'hr'          "Croatian"         \
                      'hu'          "Hungarian"        \
                      'id'          "Indonesian"       \
                      'ie'          "Interlingue"      \
                      'il'          "il"               \
                      'in'          "in"               \
                      'iq'          "iq"               \
                      'ir'          "ir"               \
                      'is'          "Icelandic"        \
                      'it'          "Italian"          \
                      'jp'          "Japanese"         \
                      'ke'          "ke"               \
                      'kg'          "Kongo"            \
                      'kh'          "kh"               \
                      'kr'          "Kanuri"           \
                      'kz'          "kz"               \
                      'la'          "Latin"            \
                      'latam'       "Latin-American"   \
                      'lk'          "lk"               \
                      'lt'          "Lithuanian"       \
                      'lv'          "Latvian"          \
                      'ma'          "ma"               \
                      'mao'         "Maori"            \
                      'md'          "md"               \
                      'me'          "me"               \
                      'mk'          "Macedonian"       \
                      'ml'          "Malayalam"        \
                      'mm'          "mm"               \
                      'mn'          "Mongolian"        \
                      'mt'          "Maltese"          \
                      'mv'          "mv"               \
                      'my'          "Burmese"          \
                      'nec_vndr/jp' "nec_vndr/jp"      \
                      'ng'          "Ndonga"           \
                      'nl'          "Dutch"            \
                      'no'          "Norwegian"        \
                      'np'          "np"               \
                      'ph'          "ph"               \
                      'pk'          "pk"               \
                      'pl'          "Polish"           \
                      'pt'          "Portuguese"       \
                      'ro'          "Romanian"         \
                      'rs'          "rs"               \
                      'ru'          "Russian"          \
                      'se'          "Northern-Sami"    \
                      'si'          "Sinhala"          \
                      'sk'          "Slovak"           \
                      'sn'          "Shona"            \
                      'sy'          "sy"               \
                      'tg'          "Tajik"            \
                      'th'          "Thai"             \
                      'tj'          "tj"               \
                      'tm'          "tm"               \
                      'tr'          "Turkish"          \
                      'tw'          "Twi"              \
                      'tz'          "tz"               \
                      'ua'          "ua"               \
                      'us'          "English"          \
                      'uz'          "Uzbek"            \
                      'vn'          "vn"               \
                      'za'          "Zhuang"           )
readonly -a INSTALLER_DIRS=( './.install-openrc-lxde/packages'  \
                             './.install-systemd-mate/packages' )


Prompt() # (title , prompt , default_option , options)
{
  declare -l title=$1
  declare -l prompt=$2
  declare -l default_option=$3
  declare -l options="${@:4}"

  dialog --backtitle "$title" --stdout --no-tags --no-cancel --timeout $TIMEOUT \
         --default-item $default_option --menu "$prompt" $H $W $N_ITEMS $options
}


### prompt for language if not already selected ###

language=$(grep 'LANG=' /root/.codecheck | cut -d '=' -f 2)
if   [ "${language// /}" == '_UNDEFINED_' ]
then language=$(Prompt "$LANG_TITLE" "$LANG_PROMPT" $DEFAULT_LANG "${LANGUAGES[@]}")
     [ "${language}" == "" ] && language=$DEFAULT_LANG
     logger "$0: selected language='$language'"

     # prepare locale
     echo "LANG=${language}" > /etc/locale.conf

     # prepare language-specific install wizard
     language=${language/_*/}
     for init_de in `ls -d /root/.install-* | sed 's|/root/\.install-\(.*\)|\1|'`
     do  ls    /root/.install-${init_de}/language/${language}/ &> /dev/null || language='en'
         cp -a /root/.install-${init_de}/language/${language}/* /root/.install-${init_de}/
     done

     # include language-specific language packs in the install wizard package set
     for installer_dir in ${INSTALLER_DIRS[@]}
     do  case ${language} in
              'eo') echo "${ESPERANTO_LANG_PACKS[@]}"  >> ${installer_dir}/packages ;;
              'es') echo "${SPANISH_LANG_PACKS[@]}"    >> ${installer_dir}/packages ;;
              'fr') echo "${FRENCH_LANG_PACKS[@]}"     >> ${installer_dir}/packages ;;
              'gl') echo "${GALEGO_LANG_PACKS[@]}"     >> ${installer_dir}/packages ;;
              'it') echo "${ITALIAN_LANG_PACKS[@]}"    >> ${installer_dir}/packages ;;
              'pl') echo "${POLISH_LANG_PACKS[@]}"     >> ${installer_dir}/packages ;;
              'pt') echo "${PORTUGUESE_LANG_PACKS[@]}" >> ${installer_dir}/packages ;;
         esac
     done

     # confirm this selection
     sed -i "s/^LANG=.*/LANG=${language}/" /root/.codecheck
fi


### prompt for X11 keymap if not already selected ###

keymap=$(grep 'XKBMAP=' /root/.codecheck | cut -d '=' -f 2)
if   [ "${keymap// /}" == '_UNDEFINED_' ]
then keymap=$(Prompt "$KEYMAP_TITLE" "$KEYMAP_PROMPT" $DEFAULT_KEYMAP "${KEYMAPS[@]}")
     [ "${keymap}" == "" ] && keymap=$DEFAULT_KEYMAP
     logger "$0: selected keymap='$keymap'"

     # set keymap
     setxkbmap ${keymap} 2> /dev/null

     # confirm this selection
     sed -i "s/^XKBMAP=.*/XKBMAP=${keymap}/" /root/.codecheck
fi

clear
